home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / pdisk.zip / PART1.C < prev    next >
C/C++ Source or Header  |  1989-01-12  |  4KB  |  187 lines

  1. #include "part.h"
  2.  
  3. #define BACKSPACE 8
  4. #define ESC 27
  5.  
  6. int
  7. get_scr_val(start, m_str, def_val, low_lim, high_lim)
  8. int start;        /* what line this goes on */
  9. char *m_str;    /* what to say on that line */
  10. int def_val,    /* default value */
  11.     low_lim,    /* least acceptable value */
  12.     high_lim;    /* highest acceptable value */
  13. {
  14.     int val, len, len1, len2, len3;
  15.     word pos, row, col, col2;
  16.     char buf[8];
  17.  
  18.     len1 = strlen(itoa(def_val, buf, 10));
  19.     len2 = strlen(itoa(low_lim, buf, 10));
  20.     len3 = strlen(itoa(high_lim, buf, 10));
  21.     len = max(max(len1,len2),len3);
  22.     scr_pos(start,0);
  23.     printf("%s  [%*s]",m_str,len," ");
  24.     fflush(stdout);
  25.     pos = scr_rpos();    /* read scr_pos position */
  26.     row = pos >> 8;
  27.     col2 = (pos & 0xff) - 2;
  28.     col = col2-len+1;
  29. #ifdef DEBUG
  30.     scr_pos(24,0); printf("len %d, row %d, col2 %d",len,row,col2);
  31.     fflush(stdout);
  32. #endif
  33.     do {
  34.         int c;
  35.  
  36.         val = 0;
  37.         do {
  38.             scr_pos(row, col);
  39.             printf("%*d",len,val ? val : def_val);
  40.             fflush(stdout);
  41.             scr_pos(row, col2);
  42.             c=getch();
  43. #ifdef DEBUG
  44. scr_pos(18,0);printf("!! val %d, c %d\n",val,c);fflush(stdout);
  45. #endif
  46.             switch (c) {
  47.             case '0':
  48.             case '1':
  49.             case '2':
  50.             case '3':
  51.             case '4':
  52.             case '5':
  53.             case '6':
  54.             case '7':
  55.             case '8':
  56.             case '9':
  57.                 if((val = val*10 + c - '0') > high_lim) {
  58.                     scr_pos(row+2,0);
  59.                     printf("Maximum value is %d.",high_lim);
  60.                     sleep(1000L);
  61.                     erase_eol(row+2);
  62.                     val = 0;
  63.                 }
  64.                 break;
  65.             case BACKSPACE:
  66.                 if(val)
  67.                     val /= 10;
  68.                 break;
  69.  
  70.             case EOF:
  71.                 exit(1);    /* assume we need an immediate abort */
  72.                 /* NOTREACHED */
  73.  
  74.             /* default: ignore the character. */
  75.  
  76.             } /* end of switch */
  77.         } while (c != '\r' && c != '\n' && c != ESC);
  78.         if(!val)
  79.             val = def_val;
  80.         else if (val<low_lim) {
  81.             scr_pos(row+2,0);
  82.             printf("Minimum value is %d.",low_lim);
  83.             sleep(1000L);
  84.             erase_eol(row+2);
  85.         }
  86.     } while(val<low_lim);
  87.     return(val);
  88. }
  89.  
  90. int
  91. get_scr_char(start, m_str, low_lim, high_lim)
  92. int start;
  93. char *m_str;
  94. char low_lim, high_lim;
  95. {
  96.     int len=strlen(m_str), pos, chr;
  97.  
  98.     scr_pos(start,0);
  99.     fputs(m_str,stdout);
  100.     fputs(" [ ]",stdout);
  101.     fflush(stdout);
  102.     pos = scr_rpos();    /* read scr_pos position */
  103.     scr_pos(pos >> 8, (pos & 0xff) -2);
  104.     do {
  105.         chr = getch();
  106.     } while(chr != EOF && chr != ESC &&
  107.             (chr < low_lim || chr > high_lim));
  108.     if(chr == EOF || chr == ESC)
  109.         chr = '.';
  110.     putchar(chr);
  111.     return(chr);
  112. }
  113.  
  114. void
  115. message(str)
  116. char *str;
  117. {
  118.     puts(str);
  119.     sleep(1000L);    /* length (in milliseconds) is somewhat arbitrary */
  120. }
  121.  
  122. void
  123. pr_head()
  124. {
  125.     extern byte fixed_disk, num_disks;
  126.  
  127.     if(num_disks > 1)
  128.         printf("Disk number %c:\n",fixed_disk ==  DISK0 ? '0' : '1');
  129.     puts("#  OS ID                  Boot start c/s/h end c/s/h    # sec");
  130.     puts("-  -----                  ---- ----------- ---------    -----");
  131. }
  132.  
  133. char *unkname = "unknown",
  134.     *myname = "Additional DOS volume",
  135.     *xdosname = "Extended Dos Partition",
  136.      *dosname = "DOS",
  137.      *xenixname = "XENIX";
  138.  
  139. void
  140. pr_part(part_no,part)
  141. int part_no;
  142. PARTITION *part;
  143. {
  144.     char *bootable, *sys;
  145.     
  146.     switch(part->sys_ind) {
  147.     case EDOS_PART:
  148.         sys = myname;
  149.         break;
  150.     case XDOS_PART:
  151.         sys = xdosname;
  152.         break;
  153.     case DOS_PART:
  154.         sys = dosname;
  155.         break;
  156.     case XENIX_PART:
  157.         sys = xenixname;
  158.         break;
  159.     default:
  160.         sys = "Unknown";
  161.     }
  162.     bootable = part->boot_ind ? "yes" : " no";
  163.  
  164.     printf("%-3d%-23s%-3s%5u/%2u/%-2u%7u/%2u/%-2u%8lu\n",
  165.             part_no, sys, bootable,
  166.             get_cyl(part->s_sec_cyl), get_sec(part->s_sec_cyl), part->s_head,
  167.             get_cyl(part->e_sec_cyl), get_sec(part->e_sec_cyl), part->e_head,
  168.             part->num_sects);
  169. }
  170.  
  171. void
  172. erase_eos(from)    /* erase from "from" to end of screen. Leave cursor at "from" */
  173. word from;
  174. {
  175.     scr_scroll(from, 0, 24, 79, 0, 7);
  176.     scr_pos(from,0);
  177. }
  178.  
  179. void
  180. erase_eol(from)    /* erase line "from" and stay there */
  181. word from;
  182. {
  183.     scr_scroll(from, 0, from, 79, 0, 7);
  184.     scr_pos(from,0);
  185. }
  186.  
  187.